﻿package com.hirokimo.utils
{
	import flash.display.Sprite;
	/**
	 * 通过传入对象目标比例的高,宽,缩放区域的高,宽,缩放模式来控制对象缩放
	 * 
	 * @author	hirokimo
	 * 
	 * @example
	 * 
	 * 			<listing version="3.0">
	 * 			ScaleController.apply(sprite,512,288,480,360,ScaleControllerMode.SHOW_ALL);
	 * 			</listing>
	 */
	public class ScaleController
	{
		
		public function ScaleController() 
		{			
		}
		/**
		 * @param _obj 缩放对象
		 * @param _obj_width 对象正确比例时的宽度
		 * @param _obj_height 对象正确比例时的高度
		 * @param _area_width 限定区域的宽度
		 * @param _area_height 限定区域的高度
		 * @param _scaleMode 相对于限定区域的缩放方法
		 */		
		public static function apply(_obj:Object,_obj_width:Number,_obj_height:Number, _area_width:Number,_area_height:Number,_scaleMode:String):void
		{
			if (!(_obj_width > 0 && _obj_height > 0 && _obj_height > 0 && _area_width > 0))
			{
				throw new Error("缩放参数错误");
			}
			var kw:Number = _obj_width / _area_width;
			var kh:Number = _obj_height / _area_height;
			
			switch ( _scaleMode )
			{
				case "exactFit" :
					_obj.width = _area_width;
					_obj.height = _area_width;
					break;
					
				case "showAll" :
					var k_showAll:Number = (kw >= kh)?kw:kh;
					if(k_showAll > 1)
					{
						_obj.width = Math.ceil(_obj_width/k_showAll);
						_obj.height = Math.ceil(_obj_height/k_showAll);
						_obj.x = (_area_width - _obj.width) /2;
						_obj.y = (_area_height - _obj.height) / 2;
					}					
					break;
					
				case "showAllStretch" :
					var k_showAllStretch:Number = (kw >= kh)?kw:kh;
					_obj.width = Math.ceil(_obj_width/k_showAllStretch);
					_obj.height = Math.ceil(_obj_height/k_showAllStretch);
					_obj.x = (_area_width - _obj.width) /2;
					_obj.y = (_area_height - _obj.height) / 2;
					break;
				
				case  "noBorderAbsoluteCentre" :
					var k_noBorder:Number = (kw <= kh)?kw:kh;
					_obj.width = Math.ceil(_obj_width / k_noBorder);
					_obj.height = Math.ceil(_obj_height / k_noBorder);	
					_obj.x = Math.floor((_area_width - _obj.width) /2);
					_obj.y = Math.floor((_area_height - _obj.height) /2);
					break;
					
				case  "noBorderTopCentre" :
					var k_noBorderTop:Number = (kw <= kh)?kw:kh;
					_obj.width = Math.ceil(_obj_width / k_noBorderTop);
					_obj.height = Math.ceil(_obj_height / k_noBorderTop);	
					_obj.x = Math.floor((_area_width - _obj.width) /2);
					_obj.y = 0;
					break;
			}
		}
		
	}

}